package com.start.form.engine.core.global;

import com.alibaba.fastjson2.JSONObject;
import com.start.common.dataRule.StartQueryWrapper;
import com.start.common.std.StartBaseSingleton;
import com.start.common.std.StartSingletonFactory;
import com.start.form.engine.core.entity.StartFormConfig;
import com.start.form.engine.core.listener.StartTableDataListener;

public class StartGlobalTableDataListener extends StartBaseSingleton<StartGlobalTableDataListener> implements StartTableDataListener {

    private DispatcherStartFormDataListener dispatcher;

    public static StartGlobalTableDataListener getInstance() {
        return StartSingletonFactory.get(StartGlobalTableDataListener.class);
    }

    /**
     * 调用初始化函数
     */
    @Override
    public void init() {
        dispatcher = StartSingletonFactory.get(DispatcherStartFormDataListener.class);
    }

    /**
     * 保存数据前
     *
     * @param formConfig 数据配置
     * @param data       数据
     */
    @Override
    public void beforeSaveData(StartFormConfig formConfig, JSONObject data) {
        dispatcher.beforeSaveData(formConfig, data);
    }

    /**
     * 保存数据后
     *
     * @param formConfig 表配置
     * @param data       保存的数据
     */
    @Override
    public void afterSaveData(StartFormConfig formConfig, JSONObject data) {
        dispatcher.afterSaveData(formConfig, data);
    }

    /**
     * 修改数据前
     *
     * @param formConfig 表配置
     * @param data       数据
     * @param wrapper
     */
    @Override
    public void beforeUpdate(StartFormConfig formConfig, JSONObject data, StartQueryWrapper wrapper) {
        dispatcher.beforeUpdate(formConfig, data, wrapper);
    }

    /**
     * 修改数据后
     *
     * @param formConfig 表配置
     * @param data       数据
     * @param wrapper
     */
    @Override
    public void afterUpdate(StartFormConfig formConfig, JSONObject data, StartQueryWrapper wrapper) {
        dispatcher.afterUpdate(formConfig, data, wrapper);
    }

    /**
     * 删除数据前
     *
     * @param formConfig 表配置
     * @param wrapper
     */
    @Override
    public void beforeDelete(StartFormConfig formConfig, StartQueryWrapper wrapper) {
        dispatcher.beforeDelete(formConfig, wrapper);
    }

    /**
     * 删除数据后
     *
     * @param formConfig 表配置
     * @param wrapper
     */
    @Override
    public void afterDelete(StartFormConfig formConfig, StartQueryWrapper wrapper) {
        dispatcher.afterDelete(formConfig, wrapper);
    }

    /**
     * 数据查询前
     *
     * @param formConfig
     * @param wrapper
     */
    @Override
    public void beforeQueryData(StartFormConfig formConfig, StartQueryWrapper wrapper) {
        dispatcher.beforeQueryData(formConfig, wrapper);
    }

    /**
     * 数据查询后
     *
     * @param formConfig
     * @param wrapper
     * @param records
     */
    @Override
    public void afterQueryData(StartFormConfig formConfig, StartQueryWrapper wrapper, JSONObject... records) {
        dispatcher.afterQueryData(formConfig, wrapper, records);
    }

    /**
     * 查询数量之前
     *
     * @param formConfig   数据表配置
     * @param queryWrapper 查询条件
     */
    @Override
    public void beforeCount(StartFormConfig formConfig, StartQueryWrapper queryWrapper) {
        dispatcher.beforeCount(formConfig, queryWrapper);
    }

    /**
     * 查询数量之后
     *
     * @param formConfig   数据表配置
     * @param queryWrapper 查询条件
     */
    @Override
    public void afterCount(StartFormConfig formConfig, StartQueryWrapper queryWrapper) {
        dispatcher.afterCount(formConfig, queryWrapper);
    }

}
